package com.bjpowernode.javase.collection;

import java.util.Collections;
import java.util.Comparator;
import java.util.TreeSet;

/*
TreeSet集合中元素可排序的第二种方式：使用比较器的方式。

    最终结论：放到TreeSet集合或者TreeMap集合key部分的元素要做到排序
    包括两种方式：
        第一种：放到集合中的元素实现java.lang.Comparable接口。
        第二种：在构造TreeSet或者TreeMap集合的时候传入比较器对象(java.util.Comparator)

        Comparable 和 Comparator怎么选择:
            如果比较规则不会发生变化的时候，或者说当比较规则只有一个的时候，建议实现Comparable接口。
            如果比较规则有多个，并且需要在多个比较规则之间切换，建议使用Comparator接口。

            Comparator接口的设计符合OCP原则。
 */
public class TreeSetTest06 {
    public static void main(String[] args) {

        //创建TreeSet集合的时候需要使用比较器
        //TreeSet<WuGui> s = new TreeSet<>();//这样不行，没有传入比较器
        //TreeSet<WuGui> s = new TreeSet<>(new WuGuiComparator());

        //采用匿名内部类的名字，这个类没有名字直接new接口
        TreeSet<WuGui> s = new TreeSet<WuGui>(new Comparator<WuGui>(){
            @Override
            public int compare(WuGui o1, WuGui o2) {
                return o1.age - o2.age;
            }
        });

        //大家可以使用匿名内部类的方式
        s.add(new WuGui(1000));
        s.add(new WuGui(800));
        s.add(new WuGui(810));
        
        for (WuGui wg : s){
            System.out.println(wg);
        }

    }
}

class WuGui{
    int age;
    public WuGui(int age){
        this.age = age;
    }

    public String toString(){
        return "乌龟[" +
                "age=" + age+
                ']';
    }
}

//单独编写一个比较器
//比较器实现java.util.Comparator接口。(Comparable是java.lang包下的，
// Comparator是java.util包下的)
/*
class WuGuiComparator implements Comparator<WuGui> {
    @Override
    public int compare(WuGui o1, WuGui o2) {
        //指定比较规则
        return o1.age - o2.age;
    }
}*/
